﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using log4net;
using Iudicium.Parametros;

/// <summary>
/// Descripción breve de CargoCRN
/// </summary>
namespace Iudicium.Parametros.CRN
{
    public class CargoCRN
    {
        private static readonly ILog log = LogManager.GetLogger("LogFile");

        public CargoCRN()
        {
            //
            // TODO: Agregar aquí la lógica del constructor
            //
        }

        public static int InsertCargo(Cargo objCargo)
        {
            if (objCargo == null)
            {
                throw new ArgumentException("El cargo no puede ser nulo.");
            }

            if (string.IsNullOrEmpty(objCargo.Descripcion))
            {
                throw new ArgumentException("La descripcion del cargo no puede ser nulo o vacio");
            }

            int? cargoId = 0;

            CargoDSTableAdapters.CargoTableAdapter adapter= new CargoDSTableAdapters.CargoTableAdapter();

            adapter.Insert(ref cargoId,objCargo.Descripcion);

            if (cargoId == null)
            {
                throw new Exception("La sentencia SQL se ejecuto correctamente pero no se genero la llave primaria");
            }

            return cargoId.Value;
        }

        public static void UpdateCargo(Cargo objCargo)
        {
            if (objCargo == null)
            {
                throw new ArgumentException("El Cargo no puede ser nulo.");
            }
            if (objCargo.CargoId <= 0)
            {
                throw new ArgumentException("CargoId no puede ser menor o igual que cero.");
            }
            if (string.IsNullOrEmpty(objCargo.Descripcion))
            {
                throw new ArgumentException("La descripcion del cargo no puede ser nulo o vacio");
            }
            CargoDSTableAdapters.CargoTableAdapter adpater =
                   new CargoDSTableAdapters.CargoTableAdapter();

            adpater.Update(objCargo.CargoId, objCargo.Descripcion);

        }

        public static void DeleteCargo(int CargoId)
        {
            if (CargoId <= 0)
            {
                throw new ArgumentException("cargoId no puede ser menor o igual que cero.");
            }
            CargoDSTableAdapters.CargoTableAdapter adpater =
                  new CargoDSTableAdapters.CargoTableAdapter();

            adpater.Delete(CargoId);

        }

        public static Cargo GetCargoById(int CargoId)
        {
            if (CargoId <= 0)
            {
                throw new ArgumentException("cargoId no puede ser menor o igual que cero.");
            }

            CargoDSTableAdapters.CargoTableAdapter adpater =
                new CargoDSTableAdapters.CargoTableAdapter();

            CargoDS.CargoDataTable tabla =
                adpater.GetCargoById(CargoId);

            if (tabla == null || tabla.Rows.Count == 0)
            {
                throw new Exception("No se pudo obtener el cargo " + CargoId + " de la base de datos");
            }
            return ConstruirCargo(tabla[0]);
        }

        public static List<Cargo> GetCargoBySearch(string parametro)
        {
            List<Cargo> lista = new List<Cargo>();

            CargoDSTableAdapters.CargoTableAdapter adpater =
                  new CargoDSTableAdapters.CargoTableAdapter();

            CargoDS.CargoDataTable tabla =
                adpater.GetCargoBySearch(parametro);

            if (tabla == null)
            {
                throw new Exception("No se pudo obtener resultados de la busqueda con el parametro " +
                    parametro +
                    " de la base de datos");
            }

            foreach (CargoDS.CargoRow row in tabla)
            {
                Cargo obj = ConstruirCargo(row);
                if (obj != null)
                    lista.Add(obj);
            }
            return lista;
        }

        public static Cargo ConstruirCargo(CargoDS.CargoRow row)
        {
            if (row == null)
                return null;
            return new Cargo(row.cargoId, row.descripcion);

        }

    }
}
